﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Twin
{
    class Crc
    {    
        //===========================================
        // len最大：32k
        //===========================================
        public static bool CheckCRC(byte[] buf, int start, int len){
            int i;
            int sum = 0;
        
            //try{
                for(i=0;i<len;i++){
                  sum += buf[start + i];
                }
            //}catch(Exception e){
                //TextOut.println(KGet.HHmmSS() + " KMsg.CheckCRC " + e.getMessage());
            //    return false;
            //}
	        sum = sum & 0x0ffff;
            int oppo_sum = KGet.Short(buf, start + len);
            int hhh = (sum + oppo_sum + 1) & 0x0ffff;
            if(hhh == 0)return true;
	        return false;
        }

    
        //==========================================
        // len最大：32k
        //==========================================
        public static int GetCRC(byte[] buf, int start, int len)
        {
            int i;		
            int sum;

	        sum=0;
            for(i=0; i<len; i++){
                sum += buf[start + i];
            }

            int t = (~sum)&0x0ffff;
            return t;
        }
    
        //==========================================================================
        //For Kui-short
        //CRC: byte
        public static bool CheckCRC8(byte[] buf, int start, int len){
            int i;
            int sum = 0;
        
            //try{
                for(i=0;i<len;i++){
                  sum += buf[start + i];
                }
            /*}catch(Exception e){
                //TextOut.println(KGet.HHmmSS() + " KMsg.CheckCRC " + e.getMessage());
                return false;
            }*/
	        sum = sum & 0x0ff;
            byte oppo_sum = buf[start + len];
            int hhh = (sum + oppo_sum + 1) & 0x0ff;
            if(hhh == 0)return true;
	        return false;
        }

        public static byte GetCRC8(byte[] buf, int start, int len)
        {
            int i;		
            int sum;

	        sum=0;
            for(i=0; i<len; i++){
                sum += buf[start + i];
            }

            byte t = (byte)((~sum)&0x0ff);
            return t;
        }
    
        public static byte GetXOR(byte[] buf, int start, int len)
        {
            int i;		
            byte x = 0;
            for(i = 0; i < len; i++){
                x ^= buf[start + i];
            }
            return x;
        }
    }
}
